import axios from 'axios';
const api_rul = import.meta.env.VITE_BASE_SERVER

const instance = axios.create({
    timeout: 1000 * 60,
    // `withCredentials` 表示跨域请求时是否需要使用凭证
    withCredentials: true,
    // `validateStatus` 定义对于给定的HTTP 响应状态码是 resolve 或 reject  promise 。
    // 如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`)，promise 将被 resolve; 否则，promise 将被 rejecte
    validateStatus: status => {
        return status >= 200 && status < 300; // default
    },
    //网易云音乐的公开API
    // baseURL: '/music'
    baseURL: api_rul+'music'
});

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 响应拦截器
instance.interceptors.response.use(function (response) {
  // 检查响应状态码
  const { status, data } = response;
  // 如果状态码不是 2xx, 显示错误消息
  if (status < 200 || status >= 300) {
    console.log("响应数据",data)
    const errorMessage = data && data.message ? data.message : `响应异常，状态码: ${status}`;
    ElMessage.error(errorMessage);
    return Promise.reject(new Error(errorMessage));
  }
  // 请求成功，返回 data
  return data;
}, function (error) {
  // 处理其他错误，例如网络错误
  if (error.response) {
    // 请求已发出且服务器有响应
    const { status,data } = error.response;
    const errorMessage = data && data.message ? data.message : `请求错误，状态码: ${status}`;
    ElMessage.error(errorMessage);
  } else {
    // 其他错误，例如请求未发出
    ElMessage.error('网络错误，请检查您的网络连接');
  }
  return Promise.reject(error);
});

const ajaxMethod = ['get', 'post']
const api = {}
ajaxMethod.forEach(method => {
    api[method] = function (uri, data, config) {
        return new Promise(function (resolve, reject) {
            instance[method](uri, data, config)
            .then(response => {
                resolve(response)
            })
            .catch(error => {
                reject(error)
            })
        })
    }
});

export default api;
